/**
 * 
 * Praktikum CG WP WS13/14
 * Gruppe: Andreas Rebri(andreas.rebri@haw-hamburg.de)
 * 		   Joschka Schulz(joschka.schulz@haw-hamburg.de)
 * Aufgabe : Aufgabenblatt 5
 * Verwendete Quellen: -
 */
package edu.cg7;

import java.util.ArrayList;
import java.util.List;

import javax.vecmath.Point3d;
import javax.vecmath.TexCoord3f;


/**
 * Die Klasse representiert ein Objekt, dass aus mehreren Dreiecken besteht.
 */
public class TriangleMesh implements ITriangleMesh {
	/**
	 * Liste der Dreicecke
	 */
	private List<Triangle> triangles;
	
	/**
	 * liste der zugehoerigen Knotenpunkte
	 */
	private List<Point3d> vertices;

	/**
	 * liste der zugehoerigen Texturkoordianten
	 */
	private List<TexCoord3f> textureCoordinates;

	public TriangleMesh() {
		triangles = new ArrayList<>();
		vertices = new ArrayList<>();
		textureCoordinates = new ArrayList<>();
	}

	/**
	 * Fuegt ein Dreieck zum TriangleMesh hinzu.
	 */
	@Override
	public void addTriangle(Triangle triangle) {
		triangles.add(triangle);
	}

	/**
	 * Fuegt ein Vertex zum TriangleMesh hinzu
	 */
	@Override
	public int addVertex(Point3d vertex) {
		if(!vertices.contains(vertex)) {
			vertices.add(vertex);
		}
		return vertices.indexOf(vertex);
	}

	@Override
	public int getNumberOfTriangles() {
		return triangles.size();
	}

	@Override
	public int getNumberOfVertices() {
		return vertices.size();
	}

	@Override
	public Triangle getTriangle(int index) {
		return triangles.get(index);
	}

	@Override
	public Point3d getVertex(int index) {
		return vertices.get(index);
	}
	
        @Override
	public List<TexCoord3f> getTextureCoordinates() {
		return textureCoordinates;
	}
	
	/**
	 * Versetzt das Objekt in seinen Ursprungszustand ohne Inhalt.
	 */
	@Override
	public void clear() {
		triangles.clear();
		vertices.clear();
	}

	@Override
	public int addTextureCoordinate(TexCoord3f tCoord) {
		if(!textureCoordinates.contains(tCoord)) {
			textureCoordinates.add(tCoord);
		}
		return textureCoordinates.indexOf(tCoord);
	}

	@Override
	public int getNumberOfTextureCoordinates() {
		return textureCoordinates.size();
	}

	@Override
	public TexCoord3f getTextureCoordinate(int index) {
		return textureCoordinates.get(index);		
	}

}
